package br.com.esporte.apresentacao.infra.componente.itemPresencaDiaPartida;

import java.util.Date;
import java.util.List;

import org.apache.wicket.Component;
import org.apache.wicket.behavior.AttributeAppender;
import org.apache.wicket.markup.html.IHeaderResponse;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.list.ListItem;
import org.apache.wicket.markup.html.list.ListView;
import org.apache.wicket.model.Model;
import org.apache.wicket.request.resource.PackageResourceReference;

import br.com.esporte.apresentacao.grupoEsporteGrupo.IPaginaPresenca;
import br.com.esporte.apresentacao.infra.componente.ComponenteGenerico;
import br.com.esporte.negocios.entidade.imp.PresencaDiaPraticado;
import br.com.esporte.negocios.entidade.imp.Usuario;
import br.com.esporte.negocios.entidade.util.StatusPresencaEnum;
import br.com.esporte.negocios.util.Util;

/**
 * 
 * @author Milton Domingues
 * 
 */
public class ItemPresencaDiaContainer extends ComponenteGenerico {


	private static final long serialVersionUID = -8669463744759479568L;

	private List<PresencaDiaPraticado> presencas;

	private Usuario usuarioLogado;

	private IPaginaPresenca pagina;

	private Date data;

	public ItemPresencaDiaContainer(String id, Date data, List<PresencaDiaPraticado> presencas, Usuario usuarioLogado, IPaginaPresenca pagina) {
		super(id);
		this.setData(data);
		this.setOutputMarkupId(true);
		this.setPagina(pagina);
		this.setUsuarioLogado(usuarioLogado);
		this.setPresencas(presencas);
		this.montarComponente();
	}

	private ListView<PresencaDiaPraticado> criarListaPresencar(){
		ListView<PresencaDiaPraticado> lista = new ListView<PresencaDiaPraticado>("listaPresenca", this.getPresencas()) {

			private static final long serialVersionUID = 4969482145799829231L;

			@Override
			protected void populateItem(ListItem<PresencaDiaPraticado> item) {
				item.setOutputMarkupId(true);

				PresencaDiaPraticado presenca = item.getModelObject();
				String className = ItemPresencaDiaContainer.this.obterClassPresenca(presenca);
				item.add(new AttributeAppender("class", new Model<String>(className), " "));
				item.add(new ItemPresencaDiaPartida("itemPresenca", presenca, ItemPresencaDiaContainer.this, item, ItemPresencaDiaContainer.this.getUsuarioLogado(), ItemPresencaDiaContainer.this.getPagina()));
			}
		};
		return lista;
	}

	public Date getData() {
		return this.data;
	}

	public IPaginaPresenca getPagina() {
		return this.pagina;
	}

	public List<PresencaDiaPraticado> getPresencas() {
		return this.presencas;
	}

	public Usuario getUsuarioLogado() {
		return this.usuarioLogado;
	}

	@Override
	public void montarComponente() {
		this.add(new Label("dia", Util.coverterDataStringExtenso(this.getData())));
		Form<Component> form = new Form<Component>("form");
		form.add(this.criarListaPresencar());
		this.add(form);
	}

	public String obterClassPresenca(PresencaDiaPraticado presenca){
		StringBuilder builder = new StringBuilder();
		builder.append("item-chamado-");

		if(presenca.getStatus().equals(StatusPresencaEnum.INDEFINIDO)){
			String esportCodigo = presenca.getDiaPraticado().getGrupo().getTipo().getCodigo();
			builder.append(esportCodigo);
		}else if(presenca.getStatus().equals(StatusPresencaEnum.CONFIRMADO)){
			builder.append(StatusPresencaEnum.CONFIRMADO.getCodigo());
		}else if(presenca.getStatus().equals(StatusPresencaEnum.MACHUCADO)){
			builder.append(StatusPresencaEnum.MACHUCADO.getCodigo());
		}else if(presenca.getStatus().equals(StatusPresencaEnum.OUTROS)){
			builder.append(StatusPresencaEnum.OUTROS.getCodigo());
		}

		return builder.toString();
	}

	/**
	 * Css do componente
	 */
	@Override
	public void renderHead(IHeaderResponse response) {
		response.renderCSSReference(new PackageResourceReference(ItemPresencaDiaContainer.class, "css/ItemPresencaDiaPartidaContainer.css"));
	}

	public void setData(Date data) {
		this.data = data;
	}

	public void setPagina(IPaginaPresenca pagina) {
		this.pagina = pagina;
	}

	public void setPresencas(List<PresencaDiaPraticado> presencas) {
		this.presencas = presencas;
	}

	public void setUsuarioLogado(Usuario usuarioLogado) {
		this.usuarioLogado = usuarioLogado;
	}

}
